package com.stm.bi.utils;

import com.github.pagehelper.PageInfo;
import com.stm.framework.model.CustomizePage;

import java.util.ArrayList;
import java.util.List;

public class PaginationUtils {

    /**
     * 将数据列表转换为分页对象 CustomizePage
     *
     * @param list      数据列表
     * @param pageSize  每页大小
     * @param pageNum   当前页码
     * @param <T>       数据类型
     * @return          分页对象 CustomizePage
     */
    public static <T> CustomizePage<T> toCustomizePage(List<T> list, int pageSize, int pageNum) {
        if (list == null || list.isEmpty()) {
            return new CustomizePage<>(new ArrayList<>(), pageSize, pageNum, 0);
        }

        PageInfo<T> pageInfo = new PageInfo<>(list);
        return new CustomizePage<>(list, pageSize, pageNum, pageInfo.getTotal());
    }

    /**
     * 手动分页方法（不依赖 PageHelper）
     *
     * @param fullList  完整的数据列表
     * @param pageSize  每页大小
     * @param pageNum   当前页码
     * @param <T>       数据类型
     * @return          分页后的子列表
     */
    public static <T> List<T> paginateList(List<T> fullList, int pageSize, int pageNum) {
        if (fullList == null || fullList.isEmpty() || pageSize <= 0 || pageNum <= 0) {
            return new ArrayList<>();
        }

        int total = fullList.size();
        int fromIndex = Math.min((pageNum - 1) * pageSize, total);
        int toIndex = Math.min(fromIndex + pageSize, total);

        return fullList.subList(fromIndex, toIndex);
    }

    /**
     * 手动分页并返回 CustomizePage 对象
     *
     * @param fullList  完整的数据列表
     * @param pageSize  每页大小
     * @param pageNum   当前页码
     * @param <T>       数据类型
     * @return          分页对象 CustomizePage
     */
    public static <T> CustomizePage<T> manualPaginate(List<T> fullList, int pageSize, int pageNum) {
        List<T> paginatedList = paginateList(fullList, pageSize, pageNum);
        long total = fullList.size();
        return new CustomizePage<>(paginatedList, pageSize, pageNum, total);
    }
}
